package com.yycx.module.bus.provider.service.hy;

import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.mybatis.base.service.IBaseService;
import com.yycx.common.mybatis.model.ResultBody;
import com.yycx.module.bus.client.entity.hy.HyOrder;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 海鹰订单 接口
 *
 * @author flyme
 * @date 2020-07-28
 */
public interface HyRemoteOrderService extends IBaseService<HyOrder> {
    /**
     * 查询入订单主订单(采购数据)
     *
     * @param params
     * @return
     */
    ResultBody hyOrderList(Map params);

    /**
     * 查询入订单主详情(采购数据)
     *
     * @param orderNo
     * @return
     */
    EntityMap getHyOrderById(String orderNo);


    /**
     * 入订单明细
     *
     * @param orderNo
     * @return
     */
    List<EntityMap> queryHyOrderDetailList(String orderNo);


    /**
     * 出订单主订单分页列表
     *
     * @param params
     * @param dbName
     * @return
     */
    ResultBody outOrderPageList(String dbName, Map params);


    /**
     * 查询出订单主详情
     *
     * @param orderNo
     * @param dbName
     * @return
     */
    EntityMap getOutOrderById(String dbName, String orderNo);

    /**
     * 查询出订单主全部信息
     *
     * @param dbName
     * @param orderNo
     * @return
     */
    EntityMap getOutOrderAllFieldById(String dbName, String orderNo);


    /**
     * 查询出订单详情
     *
     * @param dbName
     * @param orderNo
     * @return
     */
    List<EntityMap> queryOutHyOrderDetailList(String dbName, String orderNo);

    /**
     * 根据购货方编码查询
     *
     * @param customCode
     * @return
     */
    EntityMap getCustomByCode(String customCode);

    /**
     * 查询客户商品历史销售信息
     *
     * @param dbName
     * @param drugNo
     * @param customCode
     * @return
     */
    List<EntityMap> getHistoryDrug(String dbName, String drugNo, String customCode);


    /**
     * description: 查询商品信息
     * date: 2023年-02月-02日 14:34
     * author: ldd
     *
     * @param productCode
     * @return com.yycx.common.base.entity.EntityMap
     */
    EntityMap getProductByCode(String productCode);

    /**
     * description: 查询指定类型的商品
     * date: 2023年-02月-02日 14:34
     * author: ldd
     *
     * @param productType
     * @return com.yycx.common.base.entity.EntityMap
     */
    List<EntityMap> getProductByType(String dbName, String productType);


    /**
     * description: 查询销售订单
     * date: 2023年-01月-31日 09:31
     * author: ldd
     *
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleOrderList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> saleOrderList(String dbName, String currentDay, String orderNo);

    List<EntityMap> saleOrderList(String dbName, String startDay, String endDay, List<String> orderNo);

    /**
     * description: 查看当天销售总数
     * date: 2023年-08月-15日 18:53
     * author: ldd
     *
     * @param companyErpInstance
     * @param currentDay
     * @return java.lang.Long
     */
    long saleOrderCount(String companyErpInstance, String currentDay);

    /**
     * description: 查询销售订单明细
     * date: 2023年-01月-31日 09:31
     * author: ldd
     *
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleOrderDetailList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> saleOrderDetailList(String dbName, String currentDay, String orderNo);


    /**
     * description: 采购
     * date: 2023年-01月-31日 10:37
     * author: ldd
     *
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> buyOrderList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> buyOrderList(String dbName, String startDay, String endDay, List<String> orderNo);

    List<EntityMap> buyOrderList(String dbName, String currentDay, String orderNo);

    List<EntityMap> buyOrderDetailList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> buyOrderDetailList(String dbName, String currentDay, String orderNo);

    /**
     * description: 查看当天销售总数
     * date: 2023年-08月-15日 19:27
     * author: ldd
     *
     * @param companyErpInstance
     * @param currentDay
     * @return long
     */
    long buyOrderCount(String dbName, String currentDay);


    /**
     * description: 查询当月销售商品
     * date: 2023年-02月-10日 09:29
     * author: ldd
     *
     * @param dbName
     * @param month
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> sampleOrderDetailList(String dbName, String month);

    /**
     * description: 查询当月销售商品
     * date: 2023年-02月-10日 09:29
     * author: ldd
     *
     * @param dbName
     * @param month
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> sampleOrderList(String dbName, String month);

    /**
     * description: 查样品 当月销售
     * date: 2023年-02月-10日 15:53
     * author: ldd
     *
     * @param dbName
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleCostList(String dbName, String month, List<String> orderNos);

    List<EntityMap> saleCostList(String dbName, String currentDay, String orderNo);

    List<EntityMap> saleCostList(String dbName, String startDay, String endDay, List<String> strings);

    /**
     * description: 查样品 当月销售
     * date: 2023年-02月-10日 15:54
     * author: ldd
     *
     * @param dbName
     * @param month
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleCostDetailList(String dbName, String month, List<String> orderNos);

    List<EntityMap> saleCostDetailList(String dbName, String month, String orderNo);

    long saleCostCount(String companyErpInstance, String currentDay);

    /**
     * description: 商品进货价格
     * date: 2023年-02月-10日 16:09
     * author: ldd
     *
     * @param dbName
     * @param productCode
     * @param productBatch
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> getBuyProductByBatch(String dbName, String productCode, String productBatch);

    /**
     * description: 商品同批次卖出数量
     * date: 2023年-02月-10日 16:09
     * author: ldd
     *
     * @param dbName
     * @param productCode
     * @param productBatch
     * @param orderDate
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> getSaleProductByBatch(String dbName, String productCode, String productBatch, String orderDate);

    List<EntityMap> receiptPaymentOrderList(String fx, String erpName, String currentDay, List<String> strings);

    List<EntityMap> receiptPaymentOrderList(String fx, String erpName, String startDay, String endDay, List<String> strings);

    /**
     * description: 采购付款单
     * date: 2023年-02月-20日 12:03
     * author: ldd
     *
     * @param erpName
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePaymentOrderList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> purchasePaymentOrderDetailList(String erpName, String currentDay, List<String> orderNos);

    //付款明细
    List<EntityMap> purchasePaymentDetailList(String companyErpInstance, String mxNo, String productCode, String productBatch);

    /**
     * description: 按月查询
     * date: 2023年-03月-01日 15:47
     * author: ldd
     *
     * @param dbName
     * @param month
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleOrderDetail(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> purchasePayableOrderList(String dbName, String currentDay, List<String> orderNos);

    List<EntityMap> purchasePayableOrderDetailList(String dbName, String currentDay, List<String> orderNos);

    /**
     * 查询海鹰ERP商品列表
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHyDrugList(String dbName);

    /**
     * 查询海鹰商品
     *
     * @param dbName
     * @param title
     * @param drugCodes
     * @return
     */
    List<EntityMap> selectTop10HyDrugList(String dbName, String title, List<String> drugCodes);

    List<EntityMap> selectTop10HyDrugListNew(String dbName, String title, List<String> drugCodes);

    /**
     * 查询仓库编号
     *
     * @param dbName
     * @param storeNameList
     * @return
     */
    List<EntityMap> selectStoreCode(String dbName, List<String> storeNameList);

    /**
     * 查询商品编码
     *
     * @param dbName
     * @param storeCodeList
     * @return
     */
    List<EntityMap> selectDrugCodes(String dbName, List<String> storeCodeList);

    /**
     * 查询客商资料
     *
     * @param dbName
     * @param title
     * @return
     */
    List<EntityMap> selectTop20HyCustomList(String dbName, String title);

    /**
     * 查询海鹰ERP部门
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHyDeptList(String dbName);

    /**
     * 查询海鹰业务员
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHySaleManList(String dbName);

    /**
     * 查询海鹰客户
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHasUpdateHyCustomList(String dbName, EntityMap params);

    /**
     * 查询单个客户
     *
     * @param dbName
     * @param customCode
     * @return
     */
    EntityMap selectHyCustom(String dbName, String customCode);


    /**
     * 查询海鹰客户收货地址
     *
     * @param dbName
     * @param customCode
     * @return
     */
    List<EntityMap> selectHyCustomAddress(String dbName, String customCode);

    /**
     * 根据商品ID查询商品批号
     *
     * @param dbName
     * @param drugNo
     * @return
     */
    List<EntityMap> selectLotNoByDrugNo(String dbName, String drugNo, List<String> codes );


    /**
     * 查询商品现存数量
     *
     * @param dbName
     * @param drugNo
     * @return
     */
    EntityMap selectHyDrugSurplusNum(String dbName, String drugNo);

    /**
     * 查询商品库存
     *
     * @param dbName
     * @param drugLotId
     * @return
     */
    EntityMap selectByDrugLotId(String dbName, Integer drugLotId);

    /**
     * 统计出定数量
     *
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    Integer countCdCount(String dbName, String drugNo, String drugLotNo, String storeCode);


    /**
     * 统计某个批号某个成本价销售数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @param costPrice
     * @return
     */
    BigDecimal countCddx(String dbName, String drugNo, String drugLotNo, String storeCode, @Param("costPrice") BigDecimal costPrice);


    /**
     * 统计某批号某单价其他出库数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @param costPrice
     * @return
     */
    BigDecimal countOtherCount(String dbName, String drugNo, String drugLotNo, String storeCode, @Param("costPrice") BigDecimal costPrice);



    /**
     * 统计出库商量
     *
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    Integer countCkCount(String dbName, String drugNo, String drugLotNo, String storeCode);

    /**
     * 统计某商品退货数量
     * @param dbName
     * @param drugNo
     * @param orderNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    BigDecimal countThCount(String dbName, String orderNo, String drugNo, String drugLotNo, String storeCode);

    /**
     * 统计某商品退货数量
     * @param dbName
     * @param drugNo
     * @param orderNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    BigDecimal countThCount1(String dbName, String orderNo, String drugNo, String drugLotNo, String storeCode);


    /**
     * 根据商品库存编码查询某批号商品库存信息
     *
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    List<EntityMap> selectDrugLotList(String dbName, String drugNo, String drugLotNo, String storeCode);


    Integer selectLockCount(String dbName, String drugLotId,String drugLotNo,String storeCode);


    /**
     * 库存明细
     *
     * @param params
     * @return
     */
    ResultBody stockReport(Map params);

    /**
     * 插入海鹰订单
     *
     * @param dbName
     * @param entity
     */
    void insertHyOrder(String dbName, EntityMap entity);

    /**
     * 查询订单成本价
     * @param dbName
     * @param orderDetailsId
     */
    BigDecimal selectCostPrice(String dbName, String orderDetailsId);

    /**
     * 插入退货单
     *
     * @param dbName
     * @param entity
     */
    void insertHyBackOrder(String dbName, EntityMap entity);

    /**
     * 插入海鹰订单明细
     *
     * @param dbName
     * @param entity
     */
    void insertHyOrderDetails(String dbName, EntityMap entity);

    /**
     * 更新商品库存在单数
     *
     * @param dbName
     * @param entity
     * @return
     */
    void updateByDrugLotId(String dbName, EntityMap entity);


    /**
     * 重新计商品库存在单数
     * @param dbName
     * @param entity
     */
    void updateOnUserCount(String dbName, EntityMap entity);

    /**
     * 重新计算商品目录在单数
     * @param dbName
     * @param entity
     */
    void updateDrugOnUserCount(String dbName, EntityMap entity);

    /**
     * 更新最近销售日期
     *
     * @param dbName
     * @param entity
     */
    void updateLastSaleDate(String dbName, EntityMap entity);


    /**
     * 更新商品编码
     *
     * @param dbName
     * @param entity
     */
    void updateDrugId(String dbName, EntityMap entity);

    /**
     * 删除主订单表
     *
     * @param dbName
     * @param orderId
     */
    void deleteOrderByOrderId(String dbName, String orderId);

    /**
     * 删除主订单表
     *
     * @param dbName
     * @param orderId
     */
    void deleteOrderDetailsByOrderId(String dbName, String orderId);


    /**
     * 更新销售审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateXsComments(String dbName, EntityMap entity);

    /**
     * 更新质量审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateZlComments(String dbName, EntityMap entity);

    /**
     * 更新财务审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateCwComments(String dbName, EntityMap entity);

    /**
     * 更新结算审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateJsComments(String dbName, EntityMap entity);

    /**
     * 更新自定义成本价
     *
     * @param dbName
     */
    void updateCostPrice(String dbName);


    /**
     * 查询出库单主表是否有信息
     *
     * @param dbName
     * @param orderId
     * @return
     */
    Integer countByOrderId(String dbName, String orderId);


    /**
     * 统计业务员是否有订单
     *
     * @param dbName
     * @param saleManNo
     * @return
     */
    Integer countBySaleManNo(String dbName, String saleManNo);


    /**
     * 删除业务员
     *
     * @param dbName
     * @param saleManNo
     * @return
     */
    Integer deleteSaleManByNo(String dbName, String saleManNo);


    /**
     * 查询发货出订单主编号
     *
     * @param dbName
     * @param orderId
     * @return
     */
    Map getOutOrderNo(String dbName, String orderId);

    /**
     * 查询销售退回单
     *
     * @param dbName
     * @param orderId
     * @return
     */
    Map getCkjOutOrderNo(String dbName, String orderId);


    /**
     * 更新出订单明细配置
     *
     * @param dbName
     * @param entity
     */
    void updateOrderDetailsSysProperties(String dbName, EntityMap entity);

    /**
     * 更新同步状态
     *
     * @param dbName
     * @param entity
     */
    void updateSyncState(String dbName, EntityMap entity);


    /**
     * 查询站点编码和出订单号
     *
     * @param dbName
     * @param hostName
     * @return
     */
    EntityMap selectSysProperties(String dbName, String hostName);

    /**
     * 更新订单明细号
     *
     * @param dbName
     * @param hostName
     * @param detailsId
     * @param orderId
     */
    void updateOrderDetailsId(String dbName, String hostName, String detailsId, String orderId);

    /**
     * 查询部门
     *
     * @param dbName
     * @param deptNo
     * @return
     */
    EntityMap selectHyDeptByDeptNo(String dbName, String deptNo);


    /**
     * 添加业务员
     *
     * @param dbName
     * @param entity
     */
    void insertHySaleMan(String dbName, EntityMap entity);

    /**
     * 更新业务员
     *
     * @param dbName
     * @param entity
     */
    void updateHySaleMan(String dbName, EntityMap entity);

    /**
     * description: 订单凭证
     * date: 2023年-12月-04日 13:15
     * author: ldd
     *
     * @param params
     * @return com.yycx.common.mybatis.model.ResultBody
     */
    ResultBody hyOrderVoucherList(Map params);

    /**
     * description: 订单凭证详情
     * date: 2023年-12月-06日 20:26
     * author: ldd
     *
     * @param orderNo
     * @return com.yycx.common.base.entity.EntityMap
     */
    EntityMap getHyOrderVoucherByOrderNo(Map orderNo);

    ResultBody createVoucher(Map params);

    ResultBody mergeVoucher(Map params);

    /**
     * description: 更新销售凭证信息
     * date: 2023年-12月-06日 20:58
     * author: ldd
     *
     * @param dbName
     * @param state
     * @param voucher
     * @param split
     * @return void
     */
    void updateXsVocher(String dbName, int state, String voucher, List<String> split);

    void updateCbVocher(String dbName, int state, String voucher, List<String> split);

    /**
     * description: 更新采购凭证信息
     * date: 2023年-12月-06日 20:58
     * author: ldd
     *
     * @param dbName
     * @param state
     * @param voucher
     * @param split
     * @return void
     */
    void updateCgVocher(String dbName, int state, String voucher, List<String> split);

    void updateYpVocher(String dbName, int state, String voucher, List<String> split);

    /**
     * description: 合并生成当月凭证
     * date: 2023年-12月-08日 13:58
     * author: ldd
     *
     * @param params
     * @return com.yycx.common.mybatis.model.ResultBody
     */
    ResultBody monthVoucher(Map params);

    List<EntityMap> monthOrderList(Map params);
}
